package basicas;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Version;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.Fetch;

@Entity
public class Contrato  implements Cloneable {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private int id;

	@ManyToOne(fetch = FetchType.LAZY, cascade = { CascadeType.ALL })
	@JoinColumn(name = "idEmpresaContratada")
	@Fetch(org.hibernate.annotations.FetchMode.JOIN)
	private Empresa empresaContratada;

	@ManyToOne(cascade = { CascadeType.ALL })
	@JoinColumn(name = "idEmpresaContratante")
	private Empresa empresaContratante;

	private double valorContrato;

	@ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.ALL })
	@JoinTable(name = "clausulas_contratos", joinColumns = { @JoinColumn(name = "idContrato") }, inverseJoinColumns = { @JoinColumn(name = "idClausulaContrato") })
	private Collection<ClausulaContrato> ClausulasContrato;
	
	@Version
	private Date dataUltimaAtualizacao;

	public int getid() {
		return id;
	}

	public void setid(int id) {
		this.id = id;
	}

	public Empresa getEmpresaContratada() {
		return empresaContratada;
	}

	public void setEmpresaContratada(Empresa empresaContratada) {
		this.empresaContratada = empresaContratada;
	}

	public Empresa getEmpresaContratante() {
		return empresaContratante;
	}

	public void setEmpresaContratante(Empresa empresaContratante) {
		this.empresaContratante = empresaContratante;
	}

	public double getValorContrato() {
		return valorContrato;
	}

	public void setValorContrato(double valorContrato) {
		this.valorContrato = valorContrato;
	}

	public Collection<ClausulaContrato> getClausulasContrato() {
		return ClausulasContrato;
	}

	public void setClausulasContrato(
			Collection<ClausulaContrato> clausulasContrato) {
		ClausulasContrato = clausulasContrato;
	}

	public Contrato() {
		super();
	}

	public Contrato(int id, Empresa empresaContratada,
			Empresa empresaContratante, double valorContrato,
			Collection<ClausulaContrato> clausulasContrato) {
		super();
		this.id = id;
		this.empresaContratada = empresaContratada;
		this.empresaContratante = empresaContratante;
		this.valorContrato = valorContrato;
		ClausulasContrato = clausulasContrato;
	}

	public Date getDataUltimaAtualizacao() {
		return dataUltimaAtualizacao;
	}

	public void setDataUltimaAtualizacao(Date dataUltimaAtualizacao) {
		this.dataUltimaAtualizacao = dataUltimaAtualizacao;
	}

}
